AWS CLIを使ってAWS Lambdaのログ取得時に注意したいこと
サーモン大好き、横山です。
今回AWS CLIでAWS Lambdaのログを見ようとした時に注意したいことを紹介します。
動作環境
awscliのバージョン
$ aws --version aws-cli/1.10.13 Python/2.7.10 Darwin/15.3.0 botocore/1.4.4
AWS Lambdaのロググループ名
$ aws logs describe-log-groups --log-group-name-prefix "/aws/lambda/demo_func" { "logGroups": [ { "logGroupName": "/aws/lambda/demo_func", "creationTime": 1458178522834, "metricFilterCount": 0, "arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/demo_func:*", "storedBytes": 0 } ] }
ログストリーム名
$ aws logs describe-log-streams --log-group-name "/aws/lambda/demo_func" { "logStreams": [ { "logStreamName": "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8", "creationTime": 1458178522897, "firstEventTimestamp": 1458178523415, "lastEventTimestamp": 1458178523416, "lastIngestionTime": 1458178538472, "uploadSequenceToken": "49559729142106341411281184713470750416950415093793817186", "arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/demo_func:log-stream:2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8", "storedBytes": 0 } ] }
嵌った事象
aws logs get-log-events
にて、上記で確認した --log-stream-name
を指定しているのに A client error (ResourceNotFoundException) occurred when calling the GetLogEvents operation: The specified log stream does not exist.
と言われて取得出来ません。
$ aws logs get-log-events --log-group-name "/aws/lambda/demo_func" --log-stream-name "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8" A client error (ResourceNotFoundException) occurred when calling the GetLogEvents operation: The specified log stream does not exist.
解決方法
--log-stream-name
の引数を ' (シングルクォート)
で囲みます。
$ aws logs get-log-events --log-group-name "/aws/lambda/demo_func" --log-stream-name '2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8' { "events": [ { "timestamp": 1458178523415, "message": "Loading function\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "START RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1 Version: $LATEST\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "value1 = value1\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "value2 = value2\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "value3 = value3\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "END RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1\n", "ingestionTime": 1458178538472 }, { "timestamp": 1458178523416, "message": "REPORT RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1\tDuration: 0.29 ms\tBilled Duration: 100 ms \tMemory Size: 128 MB\tMax Memory Used: 24 MB\t\n", "ingestionTime": 1458178538472 } ], "nextForwardToken": "f/32518467704669835827145742534200547013545637961089351686", "nextBackwardToken": "b/32518467704647535081947211911059011295272989599583371264" }
理由としては $LATEST
がshellの変数として展開してしまい最終的に、 2016/03/17/[]bab17ccf7d53463c83ff9490ab86bca8
として --log-stream-name
の引数として渡していたものと考えられます。
$ echo "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8" 2016/03/17/[]bab17ccf7d53463c83ff9490ab86bca8 $ echo '2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8' 2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8
まとめ
AWS CLIを使ってAWS Lambdaのログを取得するときの参考になれば幸いです。